package com.azkj.album.network.networkframe.api;


import com.azkj.album.dto.AddOrderBean;
import com.azkj.album.dto.BackGroundListBean;
import com.azkj.album.dto.BannerBean;
import com.azkj.album.dto.CategoryBean;
import com.azkj.album.dto.GalleryBean;
import com.azkj.album.dto.HasNickName;
import com.azkj.album.dto.HistoryBean;
import com.azkj.album.dto.ListData;
import com.azkj.album.dto.LoginBean;
import com.azkj.album.dto.NewPhotoBean;
import com.azkj.album.dto.UpdateBean;
import com.azkj.album.dto.UploadBean;
import com.azkj.album.dto.VipCardBean;
import com.azkj.album.dto.VipInfoBean;
import com.azkj.album.dto.WxBean;
import com.azkj.album.network.networkframe.bean.BaseResp;

import java.util.List;
import java.util.Map;

import okhttp3.MultipartBody;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;
import rx.Observable;


public interface CommonApi {


    //获取注册短信验证码
    @FormUrlEncoded
    @POST("send")
    Observable<BaseResp> getSmsCode(@FieldMap Map<String, Object> body);

    //校验验证码
    @FormUrlEncoded
    @POST("check")
    Observable<BaseResp> checkSmsCode(@FieldMap Map<String, Object> body);

    //注册
    @FormUrlEncoded
    @POST("register")
    Observable<BaseResp<LoginBean>> register(@FieldMap Map<String, Object> body);

    //wx注册
    @FormUrlEncoded
    @POST("thirdregister")
    Observable<BaseResp<LoginBean>> registerWx(@FieldMap Map<String, Object> body);

    //登录
    @FormUrlEncoded
    @POST("login")
    Observable<BaseResp<LoginBean>> login(@FieldMap Map<String, Object> body);

    //验证码登录
    @FormUrlEncoded
    @POST("mobilelogin")
    Observable<BaseResp<LoginBean>> loginSms(@FieldMap Map<String, Object> body);

    //游客登录
    @GET("visitor")
    Observable<BaseResp<LoginBean>> loginVisitor();

    //微信获取openid
    @GET("oauth2/access_token")
    Observable<WxBean> getWxOpenID(@Query("appid") String appid, @Query("secret") String secret, @Query("code") String code, @Query("grant_type") String grant_type);

    //微信获取openid
    @GET("userinfo")
    Observable<WxBean> getWxUserInfo(@Query("access_token") String access_token, @Query("openid") String openid);

    //wx登录
    @FormUrlEncoded
    @POST("wechatlogin")
    Observable<BaseResp<LoginBean>> loginWx(@FieldMap Map<String, Object> body);


    //登出
    @FormUrlEncoded
    @POST("logout")
    Observable<BaseResp> logout(@FieldMap Map<String, Object> body);
    //注销
    @FormUrlEncoded
    @POST("closeAccount")
    Observable<BaseResp> clearUser(@FieldMap Map<String, Object> body);
    //修改密码
    @FormUrlEncoded
    @POST("resetpwd")
    Observable<BaseResp> changePsd(@FieldMap Map<String, Object> body);
    //修改手机
    @FormUrlEncoded
    @POST("changemobile")
    Observable<BaseResp> changePhone(@FieldMap Map<String, Object> body);

    //首页轮播图
    @GET("banner")
    Observable<BaseResp<List<BannerBean>>> getBanner();
    //点击轮播图
    @GET("bannerView")
    Observable<BaseResp> clickBanner(@Query("id") String id);
    //版本更新
    @GET("app_version/index")
    Observable<BaseResp<UpdateBean>> checkVersion(@Query("version") int version);
    /**
     * 图片上传
     *
     * @param
     * @return
     */
    @POST("upload")
    @Multipart
    Observable<BaseResp<UploadBean>> uploadFile(@Part MultipartBody.Part part);

    //获取相册分类
    @GET("category")
    Observable<BaseResp<List<CategoryBean>>> category();

    //删除相册
    @GET("del")
    Observable<BaseResp> del(@Query("token") String token, @Query("ids") String ids);

    //收藏相册
    @GET("collectAlbum")
    Observable<BaseResp> collectAlbum(@Query("id") String id);

    //新增编辑
    @POST("save")
    Observable<BaseResp> saveAlbum(@QueryMap Map<String, String> map);

    @GET("preDetail")
    Observable<BaseResp<ListData>> preDetail();

    //取消收藏相册
    @GET("cancelCollectAlbum")
    Observable<BaseResp> cancelCollectAlbum(@Query("id") String id);

    //取消收藏相册
    @GET("collectList")
    Observable<BaseResp<List<ListData>>> collectList(@Query("keyword") String keyword, @Query("page") String page, @Query("limit") String limit, @Query("begin_date") String begin_date, @Query("end_date") String end_date);

    //获取贴图库分类
    @GET("category")
    Observable<BaseResp<List<CategoryBean>>> galleryCategory();

    //获取贴图库-系统贴图列表
    @GET("systemList")
    Observable<BaseResp<List<GalleryBean>>> gallerySysList(@Query("category_id") String category_id, @Query("keyword") String keyword, @Query("page") String page, @Query("limit") String limit, @Query("sort_field") String sort_field, @Query("sort_order") String sort_order);

    //获取贴图库-我的贴图列表
    @GET("myList")
    Observable<BaseResp<List<GalleryBean>>> galleryMineList();

    //获取贴图库-我的收藏列表
    @GET("collectList")
    Observable<BaseResp<List<GalleryBean>>> galleryCollectList(@Query("category_id") String category_id, @Query("keyword") String keyword, @Query("sort_field") String sort_field, @Query("sort_order") String sort_order);

    //获取贴图库-系统贴图-收藏
    @GET("collectMap")
    Observable<BaseResp> collectMap(@Query("id") String id);

    //获取贴图库-系统贴图-取消收藏
    @GET("cancelCollectMap")
    Observable<BaseResp> cancelCollectMap(@Query("id") String id);

    //获取贴图库-我的贴图-删除
    @GET("delMap")
    Observable<BaseResp> delMap(@Query("id") String id);

    //获取相册列表
    @GET("list")
    Observable<BaseResp<List<ListData>>> list(@Query("token") String token, @Query("page") String page, @Query("limit") String limit, @Query("keyword") String keyword, @Query("category_id") String category_id, @Query("begin_date") String begin_date, @Query("end_date") String end_date);

    @GET("detail")
    Observable<BaseResp<ListData>> detail(@Query("id") int id);

    //获取回收站列表
    @GET("listRecycle")
    Observable<BaseResp<List<ListData>>> listRecycle(@Query("token") String token, @Query("page") String page, @Query("limit") String limit, @Query("keyword") String keyword, @Query("category_id") String category_id, @Query("begin_date") String begin_date, @Query("end_date") String end_date);

    //回收站列表-彻底删除
    @GET("delComplete")
    Observable<BaseResp> delComplete(@Query("token") String token, @Query("ids") String ids);

    //回收站列表-彻底删除
    @GET("restore")
    Observable<BaseResp> restore(@Query("token") String token, @Query("ids") String ids);

    //获取vip信息
    @GET("vipInfo")
    Observable<BaseResp<VipInfoBean>> vipInfo();

    @GET("MembershipRules")
    Observable<BaseResp<String>> MembershipRules();

    @GET("VipCard")
    Observable<BaseResp<VipCardBean>> VipCard();

    @GET("History")
    Observable<BaseResp<List<HistoryBean>>> History(@Query("page") String page, @Query("limit") String limit);

    @GET("Category")
    Observable<BaseResp<List<NewPhotoBean>>> Category();

    @POST("UploadFile")
    @Multipart
    Observable<BaseResp<UploadBean>> UploadFile(@Query("token") String token, @Part MultipartBody.Part file);

    @POST("PostSave")
    Observable<BaseResp<String>> PostSave(@Query("token") String token, @Query("id") String id, @Query("category_id") String category_id,
                                          @Query("background_id") String background_id, @Query("background_image") String background_image,
                                          @Query("map_id") String map_id, @Query("map_image") String map_image, @Query("images") String images,
                                          @Query("choose_images") String choose_images, @Query("choose_image") String choose_image, @Query("intro") String intro,
                                          @Query("cover_image") String cover_image, @Query("remark") String remark);

    @GET("SelectBackClass")
    Observable<BaseResp<List<NewPhotoBean>>> SelectBackClass();

    @GET("SelectBackList")
    Observable<BaseResp<List<BackGroundListBean>>> SelectBackList(@Query("category_id") String category_id, @Query("page") String page, @Query("limit") String limit);

    //创建订单
    @FormUrlEncoded
    @POST("createOrder")
    Observable<BaseResp<String>> orderPay(@FieldMap Map<String, Object> body);


    //反馈无满意图片
    @GET("album_map/addFeedback")
    Observable<BaseResp> addFeedback(@Query("image") String image, @Query("desc") String desc);

    //添加我的贴图
    @GET("album_map/addMap")
    Observable<BaseResp> addMap(@Query("image") String image);
    @GET("intro")
    Observable<BaseResp<List<String>>> intro(@Query("page") String page,@Query("limit") String limit,@Query("keyword") String keyword);
    @GET("remark")
    Observable<BaseResp<List<String>>> remark(@Query("page") String page,@Query("limit") String limit,@Query("keyword") String keyword);
    @GET("canAddOrder")
    Observable<BaseResp<AddOrderBean>> canAddOrder();
    //判断昵称是否存在
    @POST("hasNickname")
    Observable<BaseResp<HasNickName>> hasNickName(@Query("nickname") String nickname);
    //修改昵称
    @POST("changenickname")
    Observable<BaseResp<Object>> changenickName(@Query("token") String token, @Query("nickname") String nickname);
    @GET("deleteIntro")
    Observable<BaseResp<String>> deleteIntro(@Query("content") String content);
    @GET("deleteRemark")
    Observable<BaseResp<String>> deleteRmark(@Query("content") String content);
    @GET("addUseCount")
    Observable<BaseResp<String>> addUseCount(@Query("map_id") String map_id);

}
